﻿========================================================================
  セルフメディケーション税制 集計ツール  Version 0.2.0
========================================================================

  ソフト名     : セルフメディケーション税制 集計ツール
  バージョン   : 0.2.0
  作 者        : highdefinitionaudiodriver
  動作環境     : Windows 10/11, macOS 12+, Linux / Python 3.10 以上
  ライセンス   : MIT License（フリーソフト／オープンソース）
  種 別        : フリーソフト
  作成日       : 2026-06-08

------------------------------------------------------------------------
■ ソフトの説明 / 使用方法（README より）
------------------------------------------------------------------------

<p align="center">
  <img src="https://img.shields.io/badge/%F0%9F%92%8A-Selfmed%20Tax%20Tool-4472C4?style=for-the-badge" alt="Selfmed Tax Tool" />
</p>

<h3 align="center">セルフメディケーション税制 明細抽出ツール</h3>

<p align="center">
  通販サイトの購入履歴CSVから、確定申告に必要な<strong>対象医薬品だけ</strong>をExcelに抽出。<br/>
  Amazon・楽天などの市販薬を確定申告用に自動整理。完全オフライン動作で、購入データは一切外部に送信されません。
</p>

<p align="center">
  <a href="#クイックスタート">クイックスタート</a>&nbsp;&nbsp;|&nbsp;&nbsp;
  <a href="#対応通販サイト">対応サイト</a>&nbsp;&nbsp;|&nbsp;&nbsp;
  <a href="#カスタマイズ">カスタマイズ</a>&nbsp;&nbsp;|&nbsp;&nbsp;
  <a href="https://github.com/highdefinitionaudiodriver/selfmed-tax-tool/releases">Releases (EXE)</a>
</p>

<p align="center">
  <img src="https://img.shields.io/badge/python-3.10%2B-3776AB?logo=python&logoColor=white" alt="Python" />
  <img src="https://img.shields.io/badge/license-MIT-blue" alt="License" />
  <img src="https://img.shields.io/badge/privacy-local--only-success?logo=shieldsdotio&logoColor=white" alt="Privacy" />
  <img src="https://img.shields.io/badge/tests-30%20passed-brightgreen?logo=pytest&logoColor=white" alt="Tests" />
  <img src="https://img.shields.io/badge/sites-13%20supported-orange" alt="Sites" />
  <img src="https://img.shields.io/badge/network-zero-critical" alt="No Network" />
</p>

---

🎯 これは何？（30秒で）

- 誰のため：セルフメディケーション税制（医療費控除の特例）を毎年使っている個人・確定申告の準備をしている家庭
- 何が解決される：通販サイトの大量の購入履歴 CSV から、対象成分含有 OTC 医薬品だけを完全自動で抽出。手作業で全件レシート照合する手間（年末の数時間）をワンクリックに短縮
- なぜ既存ツールではダメか：会計ソフトの大半はクラウド前提＋年額課金。本ツールは 完全オフライン・購入データ非送信。Amazon・楽天・LOHACO 等 13 サイトの CSV を直接処理
- 使う条件：Python 3.10+（または配布 EXE）／Windows・macOS・Linux

💰 想定ユースケース・価格帯

| 用途 | 形態 |
|---|---|
| 個人の確定申告利用 | 無料（MIT） |
| 確定申告セット（Receipt OCR + PDF 自動入力との組合せ） | 個別利用は無料、束ねたパッケージ販売は今後検討 |
| 税理士事務所・薬局向けカスタマイズ（成分マスタ年次更新等） | 応相談 |

---

目次

- [概要](#概要)
- [クイックスタート](#クイックスタート)
- [デモ](#デモ)
- [対応通販サイト](#対応通販サイト)
- [インストール](#インストール)
- [使い方](#使い方)
- [各サイトのCSV取得方法](#各サイトのcsv取得方法)
- [カスタマイズ](#カスタマイズ)
- [判定ロジック](#判定ロジック)
- [アーキテクチャ](#アーキテクチャ)
- [テスト](#テスト)
- [セキュリティとプライバシー](#セキュリティとプライバシー)
- [ロードマップ](#ロードマップ)
- [Contributing](#contributing)
- [ライセンス](#ライセンス)

---

概要

Selfmed Tax Tool は、国内主要通販サイトの購入履歴CSVから セルフメディケーション税制の対象となるOTC医薬品 のみを自動抽出し、確定申告の明細書に転記しやすい Excel（xlsx）形式で出力する CLI ツールです。

> Windows EXE版なら、Pythonを入れずに「購入履歴CSVを入れる → 対象医薬品と合計金額が出る」だけで使えます。個人の確定申告、家計管理、税理士事務所での事前整理に向いた買い切り型ユーティリティです。

なぜこのツールが必要か

- Amazon や楽天で日用品と一緒に買った市販薬を、年末に手作業で仕分けるのは現実的ではない
- セルフメディケーション税制は 年間12,000円を超えた分 が所得控除の対象だが、対象品の把握が面倒で申告を諦める人が多い
- このツールを使えば CSVを1つ用意するだけ で、対象品の一覧と合計金額が即座にわかる

特徴

| | |
|---|---|
| 完全ローカル処理 | 購入履歴を外部APIに一切送信しない。LLMへの丸投げもゼロ |
| 国内13サイト対応 | Amazon / 楽天 / Yahoo! / LOHACO / ヨドバシ / マツキヨ / ウエルシア 他 |
| 3段階判定 | 対象 / 要確認 / 対象外 で自動分類。Human-in-the-loop 前提の安全設計 |
| 設定ファイル駆動 | ブランド辞書もカラムマッピングもJSON。コード変更なしで新薬・新サイトに対応 |
| 確定申告向け出力 | 国税庁の明細書フォーマットに合わせた xlsx（要確認行は黄色ハイライト） |

---

クイックスタート


1. クローン & セットアップ
git clone https://github.com/highdefinitionaudiodriver/selfmed-tax-tool.git
cd selfmed-tax-tool
pip install -r requirements.txt

2. 実行（Amazon CSVの例）
python main.py --input 注文履歴.csv --year 2025

3. selfmed_result.xlsx が生成される


> Windows EXE 版: Python 不要で使えるスタンドアロン実行ファイルを [Releases](https://github.com/highdefinitionaudiodriver/selfmed-tax-tool/releases) で配布しています。

---

デモ

<!-- docs/demo.gif に「購入履歴CSV選択 → 対象医薬品抽出 → selfmed_result.xlsx確認」までの30秒デモGIFを配置してください。 -->

実行結果


$ python main.py --input amazon_2025.csv --year 2025

読み込み中: amazon_2025.csv
  → 128 件の注文を読み込みました
  → 2025年の注文: 89 件
  → 対象: 12 件 / 要確認: 2 件

出力完了: selfmed_result.xlsx
合計金額: 15,240円

※ 「要確認」が 2 件あります。出力ファイルの黄色行を確認してください。


出力イメージ（xlsx）


┌──────────────┬──────────────────────┬──────────┬────────────┬────────┐
│ 支払先の名称  │ 医薬品の名称          │支払った   │ 購入日      │ 判定   │
│              │                      │ 金額     │            │        │
├──────────────┼──────────────────────┼──────────┼────────────┼────────┤
│ Amazon       │ ロキソニンS 12錠      │      698 │ 2025-03-15 │ 対象   │
│ 楽天市場      │ パブロンゴールドA 44錠│    1,280 │ 2025-06-02 │ 対象   │
│ LOHACO       │ アレグラFX 28錠       │    1,980 │ 2025-09-01 │ 対象   │
│ マツモトキヨシ│ バファリンEXルナ 20錠 │      980 │ 2025-11-10 │ 要確認 │ ← 黄色
│ Amazon       │ チョコラBBプラス 60錠 │    1,580 │ 2025-11-05 │ 対象   │
├──────────────┼──────────────────────┼──────────┼────────────┼────────┤
│              │                合計  │    6,518 │            │        │
└──────────────┴──────────────────────┴──────────┴────────────┴────────┘


---

対応通販サイト

--site オプションで切り替えます。対応一覧は python main.py --list-sites でも確認可能。

総合通販

| --site キー | サイト名 | 備考 |
|---|---|---|
| amazon | Amazon.co.jp | Chrome拡張「Amazon注文履歴フィルタ」等でCSV取得 |
| rakuten | 楽天市場 | 注文履歴ダウンロード機能 |
| yahoo_shopping | Yahoo!ショッピング | 旧PayPayモール含む |
| lohaco | LOHACO (ASKUL) | OTC医薬品の品揃えが豊富 |
| aupay_market | au PAY マーケット | 旧Wowma |
| yodobashi | ヨドバシ.com | 医薬品カテゴリあり |
| qoo10 | Qoo10 | |

ドラッグストアEC

| --site キー | サイト名 | 備考 |
|---|---|---|
| matsukiyo | マツモトキヨシ | マツキヨオンラインストア |
| welcia | ウエルシア | ウエルシアドットコム |
| sundrug | サンドラッグ | サンドラッグe-shop |
| tsuruha | ツルハドラッグ | ツルハグループe-shop |
| kokokara | ココカラファイン | ココカラクラブ |
| sugi | スギ薬局 | スギ薬局オンラインショップ |

> Note
> 各サイトのカラム名はデフォルト値です。実際のCSVと異なる場合は config/site_profiles/<キー>.json を編集してください。

---

インストール

方法 1: ソースから（推奨）


git clone https://github.com/highdefinitionaudiodriver/selfmed-tax-tool.git
cd selfmed-tax-tool
pip install -r requirements.txt


依存は 2つだけ:

| パッケージ | 用途 | ネットワーク |
|---|---|---|
| pandas | CSV読み込み・データ加工 | 不要 |
| openpyxl | xlsx出力・書式設定 | 不要 |

方法 2: Windows EXE（Pythonインストール不要）

[Releases](https://github.com/highdefinitionaudiodriver/selfmed-tax-tool/releases) から SelfmedTaxTool-vX.X.X.zip をダウンロードして展開するだけ。


SelfmedTaxTool.exe          ← 実行ファイル
config/                     ← 設定（編集可能）
SelfmedTaxTool説明書.txt     ← マニュアル


---

使い方

基本


python main.py --input 注文履歴.csv


サイト指定 + 年度フィルタ


python main.py --input rakuten_history.csv --site rakuten --year 2025


出力先指定


python main.py --input 注文履歴.csv --year 2025 --output 令和7年_セルメ明細.xlsx


対応サイト一覧


python main.py --list-sites


複数サイトの合算


サイトごとに個別出力 → Excel で統合
python main.py -i amazon.csv   -s amazon  -y 2025 -o out_amazon.xlsx
python main.py -i rakuten.csv  -s rakuten -y 2025 -o out_rakuten.xlsx
python main.py -i lohaco.csv   -s lohaco  -y 2025 -o out_lohaco.xlsx


CLIオプション一覧

| オプション | 短縮 | 必須 | 説明 |
|---|---|---|---|
| --input | -i | ○ | 入力CSVファイルのパス |
| --site | -s | | ECサイト種別（デフォルト: amazon） |
| --year | -y | | 対象年でフィルタ（省略時: フィルタなし） |
| --output | -o | | 出力xlsxパス（デフォルト: selfmed_result.xlsx） |
| --list-sites | | | 対応サイト一覧を表示して終了 |

EXE版の場合


SelfmedTaxTool.exe -i 注文履歴.csv -y 2025


---

各サイトのCSV取得方法

| サイト | 取得方法 |
|---|---|
| Amazon.co.jp | 公式CSV出力は廃止済み。Chrome拡張「Amazon注文履歴フィルタ」等を利用 |
| 楽天市場 | 「購入履歴」ページ → 注文履歴ダウンロード |
| Yahoo!ショッピング | 「注文履歴」→ CSV エクスポート（旧PayPayモールも同一） |
| LOHACO | 会員ページ → 注文履歴 → CSV エクスポート |
| ドラッグストア系 | サイトにより異なる。CSV機能がない場合は注文履歴をコピー → Excel → CSV保存 |

> Tip
> CSVのカラム名がデフォルト定義と合わない場合は config/site_profiles/<キー>.json を編集するだけで対応できます。

---

カスタマイズ

対象ブランドの追加・除外キーワードの編集

config/medicine_dict/brands.json を編集:


{
  "brands": [
    "ロキソニンS",
    "パブロンゴールドA",
    "追加したいブランド"     // ← ここに追記
  ],
  "exclude_keywords": [
    "ルナ",
    "キッズ",
    "ジュニア"
  ]
}


- brands にブランド名を追加 → 部分一致で 対象 判定
- exclude_keywords に追加 → 同時に含まれる商品は 要確認 に降格

CSVカラムのマッピング変更

config/site_profiles/<サイトキー>.json を編集:


{
  "display_name": "楽天市場",
  "encoding": "utf-8",
  "columns": {
    "order_date": "注文日",
    "product_name": "商品名",
    "unit_price": "商品価格",
    "quantity": "数量",
    "seller": "店舗名"
  },
  "default_seller": "楽天市場",
  "date_format": "%Y-%m-%d"
}


<details>
<summary>設定キーの詳細</summary>

| キー | 説明 |
|---|---|
| _comment | 人間向けコメント（プログラムは無視） |
| display_name | --list-sites で表示される名称 |
| encoding | CSV文字エンコーディング（utf-8 / shift_jis / cp932） |
| columns.* | CSVの実際のヘッダー名を指定 |
| default_seller | seller カラムがない場合の支払先名 |
| date_format | 日付フォーマット（%Y/%m/%d 等） |

</details>

新しいECサイトへの対応


cp config/site_profiles/_template.json config/site_profiles/mysite.json
mysite.json の columns を編集
python main.py --input mysite_history.csv --site mysite


Pythonコードの変更は 一切不要 です。

---

判定ロジック


stateDiagram-v2
    [*] --> 入力商品名
    入力商品名 --> 正規化: NFKC / スペース統一 / 小文字化
    正規化 --> ブランド照合
    ブランド照合 --> 対象外: brands いずれも不一致
    ブランド照合 --> 除外チェック: 部分一致あり
    除外チェック --> 要確認: exclude_keywords 含む
    除外チェック --> 対象: 含まない
    対象外 --> [*]: 出力から除外
    対象 --> [*]: xlsx に出力
    要確認 --> [*]: 黄色ハイライトで出力


| 判定 | 条件 | 出力 |
|---|---|---|
| 対象 | brands に一致 & exclude なし | xlsx に出力 |
| 要確認 | brands に一致 & exclude あり | xlsx に黄色ハイライトで出力 |
| 対象外 | brands に不一致 | 出力しない |

---

アーキテクチャ


graph LR
    User[CLI利用者] -->|コマンド実行| Main[main.py]
    Main --> Loader[core/loader.py]
    Main --> Matcher[core/matcher.py]
    Main --> Exporter[core/exporter.py]

    Loader -->|読込| SP[(site_profiles/*.json)]
    Loader -->|読込| CSV[(入力CSV)]
    Matcher -->|読込| Dict[(brands.json)]
    Exporter -->|書込| XLSX[(出力xlsx)]

    Loader -.->|DataFrame| Matcher
    Matcher -.->|判定付DF| Exporter


ファイル構成


selfmed-tax-tool/
├── main.py                         # CLI エントリポイント
├── requirements.txt                # pandas, openpyxl
├── build_exe.spec                  # PyInstaller ビルド定義
├── config/
│   ├── site_profiles/              # サイト別カラムマッピング（13サイト + テンプレート）
│   │   ├── amazon.json
│   │   ├── rakuten.json
│   │   ├── yahoo_shopping.json
│   │   ├── ...
│   │   └── _template.json
│   └── medicine_dict/
│       └── brands.json             # 対象ブランド辞書 + 除外キーワード
├── core/
│   ├── loader.py                   # CSV 読み込み・正規化
│   ├── matcher.py                  # 3段階判定ロジック
│   └── exporter.py                 # xlsx 出力（書式付き）
├── tests/                          # pytest テストスイート
│   ├── test_loader.py
│   ├── test_matcher.py
│   ├── test_exporter.py
│   └── fixtures/
└── dist/                           # ビルド成果物
    ├── SelfmedTaxTool.exe
    └── config/


テクノロジースタック

| 技術 | 役割 |
|---|---|
| Python 3.10+ | メイン言語 |
| pandas | CSV読み込み・DataFrame操作 |
| openpyxl | xlsx書式付き出力 |
| unicodedata | NFKC正規化（全角半角/表記ゆれ吸収） |
| argparse | CLIインターフェース |
| PyInstaller | Windows EXE ビルド |
| pytest | ユニットテスト |

---

テスト


全 30 テスト実行
python -m pytest tests/ -v


設定ファイルと対象品目マスタだけを軽く確認する場合:


python tools/check_setup.py


OK site profiles / OK legacy medicine dictionary / OK structured OTC master が揃えば、サイトプロファイルと医薬品マスタの最低限の整合性は取れています。

| モジュール | テスト数 | カバー範囲 |
|---|---|---|
| test_loader.py | 12 | CSV読込 / カラムマッピング / 金額パース / 年度フィルタ / エラー系 |
| test_matcher.py | 11 | NFKC正規化 / ブランド照合 / 除外キーワード / 一括判定 |
| test_exporter.py | 7 | xlsx生成 / ヘッダ / データ行 / 合計行 / ハイライト / 空データ |

---

セキュリティとプライバシー

> 購入履歴は極めて機微な個人情報です。 本ツールはそれを前提に設計しています。

| 項目 | 方針 |
|---|---|
| 外部API通信 | 一切なし &mdash; LLM送信も外部サーバー問合せもゼロ |
| データ保存 | 入力CSVと出力xlsxはローカルのみ |
| 依存ライブラリ | pandas / openpyxl のみ（純粋なデータ処理） |
| ネットワーク | ツール実行中の通信はゼロ |
| オフライン | 完全オフラインで動作 |

---

ロードマップ

- [x] Amazon 対応
- [x] 国内主要 13 通販サイト対応
- [x] --list-sites オプション
- [x] PyInstaller EXE ビルド
- [x] 設計書（design_document.xlsx）自動生成
- [ ] 複数サイト CSV の一括マージ機能
- [ ] 厚労省公式品目リストの自動取り込みスクリプト
- [ ] GUI 版（tkinter or PySide6）

---

Contributing

Issue・Pull Request を歓迎します。


開発環境セットアップ
git clone https://github.com/highdefinitionaudiodriver/selfmed-tax-tool.git
cd selfmed-tax-tool
pip install -r requirements.txt
pip install pytest

テスト実行（変更前に必ず）
python -m pytest tests/ -v


コントリビューションの例

- 対象ブランド辞書への追加（config/medicine_dict/brands.json）
- 新しい通販サイトのプロファイル追加（config/site_profiles/）
- バグ報告・機能提案（[Issues](https://github.com/highdefinitionaudiodriver/selfmed-tax-tool/issues)）

> Note
> 辞書やサイトプロファイルの追加は JSON ファイルの編集だけで完結するため、Python を書けなくても貢献できます。

---

免責事項

- 本ツールの判定結果は補助であり、税制対象の最終判断は厚生労働省の公式対象品目リスト・商品パッケージの「セルフメディケーション税控除対象」マークでご確認ください
- 各サイトの CSV 仕様は予告なく変更される可能性があります
- 確定申告書類の作成責任は利用者自身にあります
- 本ツールの使用によるいかなる損害についても作者は責任を負いません

---

ライセンス

[MIT License](LICENSE)

---

<p align="center">
  <sub>Built with Python + pandas + openpyxl | Zero network, Zero cloud, 100% local</sub>
</p>

---

🔗 確定申告セット（兄弟ツール）

本ツールは 3 兄弟ツール + ランチャー の一部です。組み合わせで確定申告が一気通貫に：


[1] receipt-ocr-tool  ← レシート画像 → CSV
        ↓
[2] selfmed-tax-tool  ← このリポジトリ。購入履歴 CSV → 対象医薬品 Excel
        ↓
[3] pdf-autofill-cli  ← 明細書 PDF 自動入力
        ↓
   税務署提出用 PDF 完成


- 🚀 [tax-toolkit](https://github.com/highdefinitionaudiodriver/tax-toolkit) — 上の 3 ステップを 1 つの GUI で一気通貫実行（Tkinter ウィザード）
- 📷 [receipt-ocr-tool](https://github.com/highdefinitionaudiodriver/receipt-ocr-tool) — レシート画像 OCR（Tesseract / PaddleOCR 切替対応）
- 📝 [pdf-autofill-cli](https://github.com/highdefinitionaudiodriver/pdf-autofill-cli) — 医療費控除明細書 PDF 等への自動入力（座標指定 / フォームフィールド）

---

🤝 商用利用・カスタマイズ依頼

- 個人利用は無料（MIT ライセンス）
- 法人導入支援、カスタマイズ、業務テンプレ整備、追加機能開発は応相談
- 連絡先：highdefinitionaudiodriver@gmail.com

<!-- CODEX-CURRENT-STATUS:START -->
現状サマリ (2026-05-25)

- 対象: 1. クローン & セットアップ
- 作業ブランチ: feat/sellable-v1
- README更新時点の参照コミット: 8ea21ad docs: デモ導線とローカル生成物除外を追加
- Python 実行環境向けに requirements.txt を同梱。
- docs ディレクトリ配下に設計・運用・補足資料を配置。
- tests ディレクトリ配下にテストを配置。
- 主要な確認コマンド: python -m pytest または README 記載の Python コマンド
- 次に進めるなら、README 内の利用手順と既存 docs / tests を起点に、未整備の検証手順・引き継ぎメモ・CI 化を補強する。
<!-- CODEX-CURRENT-STATUS:END -->

------------------------------------------------------------------------
■ 動作環境
------------------------------------------------------------------------
  Windows 10/11, macOS 12+, Linux / Python 3.10 以上
  ※ オンライン専用ソフトではありません（ローカル環境で動作します）。

------------------------------------------------------------------------
■ インストール / アンインストール
------------------------------------------------------------------------
  ・本アーカイブを任意のフォルダに展開してください。
  ・詳細な起動手順は上記「ソフトの説明」および同梱の README を参照してください。
  ・アンインストールは展開したフォルダを削除するだけです（レジストリ不使用）。

------------------------------------------------------------------------
■ 転載・再配布について
------------------------------------------------------------------------
  本ソフトは MIT License のオープンソースです。同梱の LICENSE 条文に
  従う限り、自由に利用・改変・再配布できます。
  なお Vector 以外の配布サイトへの無断転載はご遠慮ください。

------------------------------------------------------------------------
■ 免責事項
------------------------------------------------------------------------
  本ソフトの使用によって生じたいかなる損害についても、作者は一切の
  責任を負いません。利用者ご自身の責任においてご使用ください。

------------------------------------------------------------------------
■ 著作権
------------------------------------------------------------------------
  Copyright (c) 2026 highdefinitionaudiodriver
  本ソフトは MIT License の下で公開されています。

------------------------------------------------------------------------
■ 連絡先 / サポート
------------------------------------------------------------------------
  作 者        : highdefinitionaudiodriver
  E-mail       : highdefinitionaudiodriver@gmail.com
  GitHub       : https://github.com/highdefinitionaudiodriver/selfmed-tax-tool.git
  不具合報告・ご要望は上記 E-mail もしくはリポジトリの Issues へ
  お願いいたします。

========================================================================
